home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / fileve1a / idbas_fi.bas < prev    next >
BASIC Source File  |  1999-09-17  |  14KB  |  316 lines

  1. Attribute VB_Name = "IDBAS_FileVersion"
  2. Option Explicit
  3.  
  4. Private Declare Function GetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILE_TIME, lpLastAccessTime As FILE_TIME, lpLastWriteTime As FILE_TIME) As Long
  5. Private Declare Function GetFileVersionInfo Lib "Version.dll" Alias "GetFileVersionInfoA" (ByVal lptstrFilename As String, ByVal dwHandle As Long, ByVal dwLen As Long, lpData As Any) As Long
  6. Private Declare Function GetFileVersionInfoSize Lib "Version.dll" Alias "GetFileVersionInfoSizeA" (ByVal lptstrFilename As String, lpdwHandle As Long) As Long
  7. Private Declare Function VerQueryValue Lib "Version.dll" Alias "VerQueryValueA" (pBlock As Any, ByVal lpSubBlock As String, lplpBuffer As Any, puLen As Long) As Long
  8. Private Declare Function OpenFile Lib "kernel32" (ByVal lpFileName As String, lpReOpenBuff As OF_STRUCT, ByVal wStyle As Long) As Long
  9. Private Declare Function lclose Lib "kernel32" Alias "_lclose" (ByVal hFile As Long) As Long
  10. Private Declare Function FileTimeToLocalFileTime Lib "kernel32" (lpFileTime As FILE_TIME, lpLocalFileTime As FILE_TIME) As Long
  11. Private Declare Function FileTimeToSystemTime Lib "kernel32" (lpFileTime As FILE_TIME, lpSystemTime As SYSTEM_TIME) As Long
  12. Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
  13. Private Declare Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As Any, ByVal Source As Long, ByVal Length As Long)
  14.  
  15. Private Const OF_READ = &H0
  16. Private Const OF_SHARE_DENY_NONE = &H40
  17. Private Const OFS_MAXPATHNAME = 128
  18.  
  19. ' ===== From Win32 Ver.h =================
  20. ' ----- VS_VERSION.dwFileFlags -----
  21. Private Const VS_FFI_SIGNATURE = &HFEEF04BD
  22. Private Const VS_FFI_STRUCVERSION = &H10000
  23. Private Const VS_FFI_FILEFLAGSMASK = &H3F&
  24.  
  25. ' ----- VS_VERSION.dwFileFlags -----
  26. Private Const VS_FF_DEBUG = &H1
  27. Private Const VS_FF_PRERELEASE = &H2
  28. Private Const VS_FF_PATCHED = &H4
  29. Private Const VS_FF_PRIVATEBUILD = &H8
  30. Private Const VS_FF_INFOINFERRED = &H10
  31. Private Const VS_FF_SPECIALBUILD = &H20
  32.  
  33. ' ----- VS_VERSION.dwFileOS -----
  34. Private Const VOS_UNKNOWN = &H0
  35. Private Const VOS_DOS = &H10000
  36. Private Const VOS_OS216 = &H20000
  37. Private Const VOS_OS232 = &H30000
  38. Private Const VOS_NT = &H40000
  39. Private Const VOS__BASE = &H0
  40. Private Const VOS__WINDOWS16 = &H1
  41. Private Const VOS__PM16 = &H2
  42. Private Const VOS__PM32 = &H3
  43. Private Const VOS__WINDOWS32 = &H4
  44.  
  45. Private Const VOS_DOS_WINDOWS16 = &H10001
  46. Private Const VOS_DOS_WINDOWS32 = &H10004
  47. Private Const VOS_OS216_PM16 = &H20002
  48. Private Const VOS_OS232_PM32 = &H30003
  49. Private Const VOS_NT_WINDOWS32 = &H40004
  50.  
  51.  
  52. ' ----- VS_VERSION.dwFileType -----
  53. Private Const VFT_UNKNOWN = &H0
  54. Private Const VFT_APP = &H1
  55. Private Const VFT_DLL = &H2
  56. Private Const VFT_DRV = &H3
  57. Private Const VFT_FONT = &H4
  58. Private Const VFT_VXD = &H5
  59. Private Const VFT_STATIC_LIB = &H7
  60.  
  61. ' ----- VS_VERSION.dwFileSubtype for VFT_WINDOWS_DRV -----
  62. Private Const VFT2_UNKNOWN = &H0
  63. Private Const VFT2_DRV_PRINTER = &H1
  64. Private Const VFT2_DRV_KEYBOARD = &H2
  65. Private Const VFT2_DRV_LANGUAGE = &H3
  66. Private Const VFT2_DRV_DISPLAY = &H4
  67. Private Const VFT2_DRV_MOUSE = &H5
  68. Private Const VFT2_DRV_NETWORK = &H6
  69. Private Const VFT2_DRV_SYSTEM = &H7
  70. Private Const VFT2_DRV_INSTALLABLE = &H8
  71. Private Const VFT2_DRV_SOUND = &H9
  72. Private Const VFT2_DRV_COMM = &HA
  73.  
  74. Private Type VS_FIXEDFILEINFO
  75.     dwSignature As Long
  76.     dwStrucVersionl As Integer ' e.g. = &h0000 = 0
  77.     dwStrucVersionh As Integer ' e.g. = &h0042 = .42
  78.     dwFileVersionMSl As Integer ' e.g. = &h0003 = 3
  79.     dwFileVersionMSh As Integer ' e.g. = &h0075 = .75
  80.     dwFileVersionLSl As Integer ' e.g. = &h0000 = 0
  81.     dwFileVersionLSh As Integer ' e.g. = &h0031 = .31
  82.     dwProductVersionMSl As Integer ' e.g. = &h0003 = 3
  83.     dwProductVersionMSh As Integer ' e.g. = &h0010 = .1
  84.     dwProductVersionLSl As Integer ' e.g. = &h0000 = 0
  85.     dwProductVersionLSh As Integer ' e.g. = &h0031 = .31
  86.     dwFileFlagsMask As Long ' = &h3F For version "0.42"
  87.     dwFileFlags As Long ' e.g. VFF_DEBUG Or VFF_PRERELEASE
  88.     dwFileOS As Long ' e.g. VOS_DOS_WINDOWS16
  89.     dwFileType As Long ' e.g. VFT_DRIVER
  90.     dwFileSubtype As Long ' e.g. VFT2_DRV_KEYBOARD
  91.     dwFileDateMS As Long ' e.g. 0
  92.     dwFileDateLS As Long ' e.g. 0
  93. End Type
  94.  
  95. Public Type FILE_ATTRIBUTES
  96.     bArchive As Boolean
  97.     bCompressed As Boolean
  98.     bDirectory As Boolean
  99.     bHidden As Boolean
  100.     bNormal As Boolean
  101.     bReadOnly As Boolean
  102.     bSystem As Boolean
  103.     bTemporary As Boolean
  104. End Type
  105.  
  106. Public Type FILE_INFORMATION
  107.     cFilename As String
  108.     cDirectory As String
  109.     cFullFilePath As String
  110.     cFileType As String
  111.     nVerMajor As Long
  112.     nVerMinor As Long
  113.     nVerRevision As Long
  114.     nFileSize As Long
  115.     nFileAttributes As Long
  116.     nFileType As Long
  117.     faFileAttributes As FILE_ATTRIBUTES
  118.     dtCreationDate As Date
  119.     dtLastModifyTime As Date
  120.     dtLastAccessTime As Date
  121. End Type
  122.  
  123. Private Type SYSTEM_TIME
  124.     wYear As Integer
  125.     wMonth As Integer
  126.     wDayOfWeek As Integer
  127.     wDay As Integer
  128.     wHour As Integer
  129.     wMinute As Integer
  130.     wSecond As Integer
  131.     wMilliseconds As Integer
  132. End Type
  133.  
  134. Private Type FILE_TIME
  135.     dwLowDateTime As Long
  136.     dwHighDateTime As Long
  137. End Type
  138.  
  139. Private Type OF_STRUCT
  140.      cBytes As Byte
  141.      fFixedDisk As Byte
  142.      nErrCode As Integer
  143.      Reserved1 As Integer
  144.      Reserved2 As Integer
  145.      szPathName(OFS_MAXPATHNAME) As Byte
  146. End Type
  147.  
  148. Public Function GetFileInformation(ByVal fileFullPath As String, ByRef FileInformation As FILE_INFORMATION, Optional ByVal showMsgBox As Boolean = False) As Boolean
  149. Dim lDummy As Long, lsize As Long, rc As Long
  150. Dim lVerbufferLen As Long, lVerPointer As Long
  151. Dim sBuffer() As Byte
  152. Dim udtVerBuffer As VS_FIXEDFILEINFO
  153. Dim hFile As Integer
  154. Dim FileStruct As OF_STRUCT
  155. Dim CreationTime As FILE_TIME
  156. Dim LastAccessTime As FILE_TIME
  157. Dim LastWriteTime As FILE_TIME
  158. Dim LocalFileTime As SYSTEM_TIME
  159. Dim MessageString As String
  160.  
  161.     On Error GoTo e_HandleFileInformationError
  162.     lsize = GetFileVersionInfoSize(fileFullPath, lDummy)
  163.     If lsize >= 1 Then
  164.         ReDim sBuffer(lsize)
  165.         rc = GetFileVersionInfo(fileFullPath, 0&, lsize, sBuffer(0))
  166.         rc = VerQueryValue(sBuffer(0), "\", lVerPointer, lVerbufferLen)
  167.         MoveMemory udtVerBuffer, lVerPointer, Len(udtVerBuffer)
  168.     End If
  169.     
  170.     '**** Determine Filename Info ****
  171.     FileInformation.cFullFilePath = fileFullPath
  172.     FileInformation.cFilename = DetermineFilename(fileFullPath)
  173.     FileInformation.cDirectory = DetermineDirectory(fileFullPath)
  174.     
  175.     '**** Determine File Date Info ****
  176.     hFile = OpenFile(fileFullPath, FileStruct, OF_READ Or OF_SHARE_DENY_NONE)
  177.     If GetFileTime(hFile, CreationTime, LastAccessTime, LastWriteTime) Then
  178.         Call FileTimeToLocalFileTime(LastAccessTime, LastAccessTime)
  179.         If Not FileTimeToSystemTime(LastAccessTime, LocalFileTime) Then
  180.             FileInformation.dtLastAccessTime = Format(LocalFileTime.wMonth, "00") & "/" & Format(LocalFileTime.wDay, "00") & "/" & Format(LocalFileTime.wYear, "0000") & " " & Format(LocalFileTime.wHour, "00") & ":" & Format(LocalFileTime.wMinute, "00") & ":" & Format(LocalFileTime.wSecond, "00")
  181.         End If
  182.         Call FileTimeToLocalFileTime(CreationTime, CreationTime)
  183.         If Not FileTimeToSystemTime(CreationTime, LocalFileTime) Then
  184.             FileInformation.dtCreationDate = Format(LocalFileTime.wMonth, "00") & "/" & Format(LocalFileTime.wDay, "00") & "/" & Format(LocalFileTime.wYear, "0000") & " " & Format(LocalFileTime.wHour, "00") & ":" & Format(LocalFileTime.wMinute, "00") & ":" & Format(LocalFileTime.wSecond, "00")
  185.         End If
  186.         Call FileTimeToLocalFileTime(LastWriteTime, LastWriteTime)
  187.         If Not FileTimeToSystemTime(LastWriteTime, LocalFileTime) Then
  188.             FileInformation.dtLastModifyTime = Format(LocalFileTime.wMonth, "00") & "/" & Format(LocalFileTime.wDay, "00") & "/" & Format(LocalFileTime.wYear, "0000") & " " & Format(LocalFileTime.wHour, "00") & ":" & Format(LocalFileTime.wMinute, "00") & ":" & Format(